﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Ecosystème
{
    class Vertex
    {
        public String nom;
        public int x, y;
        public List<Arc> liste_Liaisons;
        private double le_cout;
        private Vertex pred;

        public Vertex(int x0, int y0, String nom0)
        {
            x = x0;
            y = y0;
            nom = nom0;
            this.liste_Liaisons = new List<Arc>();

        }
        public double cout()
        {
            return le_cout;

        }
        public void set_cout(double newcout)
        {
            le_cout = newcout;

        }
        public Vertex get_pred()
        {
            return pred;

        }
        public void set_pred(Vertex sta)
        {
            pred = sta; ;

        }
        public void lier_avec(Vertex s2, double cout_arc)
        {
           
            liste_Liaisons.Add(new Arc(s2.nom, cout_arc));

        }
        public Arc trouver_liaison_avec(Vertex s2)
        {
            foreach (Arc l in liste_Liaisons)
                if (l.next_Sommet == s2.nom)
                    return l;
            return null;
        
        }
        public void delier_avec(Vertex s2)
        {
            Arc ma_liaison = trouver_liaison_avec(s2);
            if (ma_liaison != null)
                liste_Liaisons.Remove(ma_liaison);
        }
        public bool existe_arc(Vertex s2)
        {
            foreach (Arc l in liste_Liaisons)
            {
                if (l.next_Sommet == s2.nom)
                    return true;
                
            }
            return false;

        }

        //test d'existance d'au moins un arc entre une station et une liste de station(permet d'eviter les graphes non connexes
        public bool existe_au_moins_un_arc(List<Vertex> liste)
        {
            foreach (Vertex s2 in liste)
                if (existe_arc(s2))
                    return true;
            return false;
        }
        //retrouver le cout avec une autre  stations
        public double cout_arc(Vertex s2)
        {
            foreach (Arc l1 in liste_Liaisons)
                if (l1.next_Sommet == s2.nom)
                    return l1.cout_liaison;
            return double.MaxValue;



        }
    }
}
